[IA64] Change callback_irq spec of PV-on-HVM for IPF
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Wed, 22 Nov 2006 10:25:21 +0000 (10:25 +0000)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Wed, 22 Nov 2006 10:25:21 +0000 (10:25 +0000)
Signed-off-by: Tsunehisa Doi <Doi.Tsunehisa@jp.fujitsu.com>
Signed-off-by: Alex Williamson <alex.williamson@hp.com>
unmodified_drivers/linux-2.6/platform-pci/platform-pci.c

index 5ff6ba83f7c8ffddcbecdf5c23af195a34a304d0..3a2453a25c4031b9db02620e14e3db794d451f7d 100644 (file)
@@ -179,10 +179,24 @@ static int get_hypercall_stubs(void)
 #define get_hypercall_stubs()  (0)
 #endif
 
+static int get_callback_irq(struct pci_dev *pdev)
+{
+#ifdef __ia64__
+       int irq;
+       for (irq = 0; irq < 16; irq++) {
+               if (isa_irq_to_vector(irq) == pdev->irq)
+                       return irq;
+       }
+       return 0;
+#else /* !__ia64__ */
+       return pdev->irq;
+#endif
+}
+
 static int __devinit platform_pci_init(struct pci_dev *pdev,
                                       const struct pci_device_id *ent)
 {
-       int i, ret;
+       int i, ret, callback_irq;
        long ioaddr, iolen;
        long mmio_addr, mmio_len;
 
@@ -196,7 +210,9 @@ static int __devinit platform_pci_init(struct pci_dev *pdev,
        mmio_addr = pci_resource_start(pdev, 1);
        mmio_len = pci_resource_len(pdev, 1);
 
-       if (mmio_addr == 0 || ioaddr == 0) {
+       callback_irq = get_callback_irq(pdev);
+
+       if (mmio_addr == 0 || ioaddr == 0 || callback_irq == 0) {
                printk(KERN_WARNING DRV_NAME ":no resources found\n");
                return -ENOENT;
        }
@@ -231,7 +247,7 @@ static int __devinit platform_pci_init(struct pci_dev *pdev,
                goto out;
        }
 
-       if ((ret = set_callback_irq(pdev->irq)))
+       if ((ret = set_callback_irq(callback_irq)))
                goto out;
 
  out: